<!DOCTYPE html><html><head>
<title>math::polynomials - Tcl Math Library</title>
<style type="text/css"><!--
    HTML {
	background: 	#FFFFFF;
	color: 		black;
    }
    BODY {
	background: 	#FFFFFF;
	color:	 	black;
    }
    DIV.doctools {
	margin-left:	10%;
	margin-right:	10%;
    }
    DIV.doctools H1,DIV.doctools H2 {
	margin-left:	-5%;
    }
    H1, H2, H3, H4 {
	margin-top: 	1em;
	font-family:	sans-serif;
	font-size:	large;
	color:		#005A9C;
	background: 	transparent;
	text-align:		left;
    }
    H1.doctools_title {
	text-align: center;
    }
    UL,OL {
	margin-right: 0em;
	margin-top: 3pt;
	margin-bottom: 3pt;
    }
    UL LI {
	list-style: disc;
    }
    OL LI {
	list-style: decimal;
    }
    DT {
	padding-top: 	1ex;
    }
    UL.doctools_toc,UL.doctools_toc UL, UL.doctools_toc UL UL {
	font:		normal 12pt/14pt sans-serif;
	list-style:	none;
    }
    LI.doctools_section, LI.doctools_subsection {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding: 	0em;
    }
    PRE {
	display: 	block;
	font-family:	monospace;
	white-space:	pre;
	margin:		0%;
	padding-top:	0.5ex;
	padding-bottom:	0.5ex;
	padding-left:	1ex;
	padding-right:	1ex;
	width:		100%;
    }
    PRE.doctools_example {
	color: 		black;
	background: 	#f5dcb3;
	border:		1px solid black;
    }
    UL.doctools_requirements LI, UL.doctools_syntax LI {
	list-style: 	none;
	margin-left: 	0em;
	text-indent:	0em;
	padding:	0em;
    }
    DIV.doctools_synopsis {
	color: 		black;
	background: 	#80ffff;
	border:		1px solid black;
	font-family:	serif;
	margin-top: 	1em;
	margin-bottom: 	1em;
    }
    UL.doctools_syntax {
	margin-top: 	1em;
	border-top:	1px solid black;
    }
    UL.doctools_requirements {
	margin-bottom: 	1em;
	border-bottom:	1px solid black;
    }
--></style>
</head>
<!-- Generated from file 'polynomials.man' by tcllib/doctools with format 'html'
   -->
<!-- Copyright &amp;copy; 2004 Arjen Markus &amp;lt;arjenmarkus@users.sourceforge.net&amp;gt;
   -->
<!-- math::polynomials.n
   -->
<body><hr> [
   <a href="../../../../../../../../home">Tcllib Home</a>
&#124; <a href="../../../../toc.html">Main Table Of Contents</a>
&#124; <a href="../../../toc.html">Table Of Contents</a>
&#124; <a href="../../../../index.html">Keyword Index</a>
&#124; <a href="../../../../toc0.html">Categories</a>
&#124; <a href="../../../../toc1.html">Modules</a>
&#124; <a href="../../../../toc2.html">Applications</a>
 ] <hr>
<div class="doctools">
<h1 class="doctools_title">math::polynomials(n) 1.0.1 tcllib &quot;Tcl Math Library&quot;</h1>
<div id="name" class="doctools_section"><h2><a name="name">Name</a></h2>
<p>math::polynomials - Polynomial functions</p>
</div>
<div id="toc" class="doctools_section"><h2><a name="toc">Table Of Contents</a></h2>
<ul class="doctools_toc">
<li class="doctools_section"><a href="#toc">Table Of Contents</a></li>
<li class="doctools_section"><a href="#synopsis">Synopsis</a></li>
<li class="doctools_section"><a href="#section1">Description</a></li>
<li class="doctools_section"><a href="#section2">PROCEDURES</a></li>
<li class="doctools_section"><a href="#section3">REMARKS ON THE IMPLEMENTATION</a></li>
<li class="doctools_section"><a href="#section4">Bugs, Ideas, Feedback</a></li>
<li class="doctools_section"><a href="#keywords">Keywords</a></li>
<li class="doctools_section"><a href="#category">Category</a></li>
<li class="doctools_section"><a href="#copyright">Copyright</a></li>
</ul>
</div>
<div id="synopsis" class="doctools_section"><h2><a name="synopsis">Synopsis</a></h2>
<div class="doctools_synopsis">
<ul class="doctools_requirements">
<li>package require <b class="pkgname">Tcl <span class="opt">?8.3?</span></b></li>
<li>package require <b class="pkgname">math::polynomials <span class="opt">?1.0.1?</span></b></li>
</ul>
<ul class="doctools_syntax">
<li><a href="#1"><b class="cmd">::math::polynomials::polynomial</b> <i class="arg">coeffs</i></a></li>
<li><a href="#2"><b class="cmd">::math::polynomials::polynCmd</b> <i class="arg">coeffs</i></a></li>
<li><a href="#3"><b class="cmd">::math::polynomials::evalPolyn</b> <i class="arg">polynomial</i> <i class="arg">x</i></a></li>
<li><a href="#4"><b class="cmd">::math::polynomials::addPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></li>
<li><a href="#5"><b class="cmd">::math::polynomials::subPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></li>
<li><a href="#6"><b class="cmd">::math::polynomials::multPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></li>
<li><a href="#7"><b class="cmd">::math::polynomials::divPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></li>
<li><a href="#8"><b class="cmd">::math::polynomials::remainderPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></li>
<li><a href="#9"><b class="cmd">::math::polynomials::derivPolyn</b> <i class="arg">polyn</i></a></li>
<li><a href="#10"><b class="cmd">::math::polynomials::primitivePolyn</b> <i class="arg">polyn</i></a></li>
<li><a href="#11"><b class="cmd">::math::polynomials::degreePolyn</b> <i class="arg">polyn</i></a></li>
<li><a href="#12"><b class="cmd">::math::polynomials::coeffPolyn</b> <i class="arg">polyn</i> <i class="arg">index</i></a></li>
<li><a href="#13"><b class="cmd">::math::polynomials::allCoeffsPolyn</b> <i class="arg">polyn</i></a></li>
</ul>
</div>
</div>
<div id="section1" class="doctools_section"><h2><a name="section1">Description</a></h2>
<p>This package deals with polynomial functions of one variable:</p>
<ul class="doctools_itemized">
<li><p>the basic arithmetic operations are extended to polynomials</p></li>
<li><p>computing the derivatives and primitives of these functions</p></li>
<li><p>evaluation through a general procedure or via specific procedures)</p></li>
</ul>
</div>
<div id="section2" class="doctools_section"><h2><a name="section2">PROCEDURES</a></h2>
<p>The package defines the following public procedures:</p>
<dl class="doctools_definitions">
<dt><a name="1"><b class="cmd">::math::polynomials::polynomial</b> <i class="arg">coeffs</i></a></dt>
<dd><p>Return an (encoded) list that defines the polynomial. A polynomial</p>
<pre class="doctools_example">
   f(x) = a + b.x + c.x**2 + d.x**3
</pre>
<p>can be defined via:</p>
<pre class="doctools_example">
   set f [::math::polynomials::polynomial [list $a $b $c $d]
</pre>
<dl class="doctools_arguments">
<dt>list <i class="arg">coeffs</i></dt>
<dd><p>Coefficients of the polynomial (in ascending
order)</p></dd>
</dl></dd>
<dt><a name="2"><b class="cmd">::math::polynomials::polynCmd</b> <i class="arg">coeffs</i></a></dt>
<dd><p>Create a new procedure that evaluates the polynomial. The name of the
polynomial is automatically generated. Useful if you need to evualuate
the polynomial many times, as the procedure consists of a single
[expr] command.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">coeffs</i></dt>
<dd><p>Coefficients of the polynomial (in ascending
order) or the polynomial definition returned by the <em>polynomial</em>
command.</p></dd>
</dl></dd>
<dt><a name="3"><b class="cmd">::math::polynomials::evalPolyn</b> <i class="arg">polynomial</i> <i class="arg">x</i></a></dt>
<dd><p>Evaluate the polynomial at x.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polynomial</i></dt>
<dd><p>The polynomial's definition (as returned by
the polynomial command).
order)</p></dd>
<dt>float <i class="arg">x</i></dt>
<dd><p>The coordinate at which to evaluate the polynomial</p></dd>
</dl></dd>
<dt><a name="4"><b class="cmd">::math::polynomials::addPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></dt>
<dd><p>Return a new polynomial which is the sum of the two others.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn1</i></dt>
<dd><p>The first polynomial operand</p></dd>
<dt>list <i class="arg">polyn2</i></dt>
<dd><p>The second polynomial operand</p></dd>
</dl></dd>
<dt><a name="5"><b class="cmd">::math::polynomials::subPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></dt>
<dd><p>Return a new polynomial which is the difference of the two others.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn1</i></dt>
<dd><p>The first polynomial operand</p></dd>
<dt>list <i class="arg">polyn2</i></dt>
<dd><p>The second polynomial operand</p></dd>
</dl></dd>
<dt><a name="6"><b class="cmd">::math::polynomials::multPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></dt>
<dd><p>Return a new polynomial which is the product of the two others. If one
of the arguments is a scalar value, the other polynomial is simply
scaled.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn1</i></dt>
<dd><p>The first polynomial operand or a scalar</p></dd>
<dt>list <i class="arg">polyn2</i></dt>
<dd><p>The second polynomial operand or a scalar</p></dd>
</dl></dd>
<dt><a name="7"><b class="cmd">::math::polynomials::divPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></dt>
<dd><p>Divide the first polynomial by the second polynomial and return the
result. The remainder is dropped</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn1</i></dt>
<dd><p>The first polynomial operand</p></dd>
<dt>list <i class="arg">polyn2</i></dt>
<dd><p>The second polynomial operand</p></dd>
</dl></dd>
<dt><a name="8"><b class="cmd">::math::polynomials::remainderPolyn</b> <i class="arg">polyn1</i> <i class="arg">polyn2</i></a></dt>
<dd><p>Divide the first polynomial by the second polynomial and return the
remainder.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn1</i></dt>
<dd><p>The first polynomial operand</p></dd>
<dt>list <i class="arg">polyn2</i></dt>
<dd><p>The second polynomial operand</p></dd>
</dl></dd>
<dt><a name="9"><b class="cmd">::math::polynomials::derivPolyn</b> <i class="arg">polyn</i></a></dt>
<dd><p>Differentiate the polynomial and return the result.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn</i></dt>
<dd><p>The polynomial to be differentiated</p></dd>
</dl></dd>
<dt><a name="10"><b class="cmd">::math::polynomials::primitivePolyn</b> <i class="arg">polyn</i></a></dt>
<dd><p>Integrate the polynomial and return the result. The integration
constant is set to zero.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn</i></dt>
<dd><p>The polynomial to be integrated</p></dd>
</dl></dd>
<dt><a name="11"><b class="cmd">::math::polynomials::degreePolyn</b> <i class="arg">polyn</i></a></dt>
<dd><p>Return the degree of the polynomial.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn</i></dt>
<dd><p>The polynomial to be examined</p></dd>
</dl></dd>
<dt><a name="12"><b class="cmd">::math::polynomials::coeffPolyn</b> <i class="arg">polyn</i> <i class="arg">index</i></a></dt>
<dd><p>Return the coefficient of the term of the index'th degree of the
polynomial.</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn</i></dt>
<dd><p>The polynomial to be examined</p></dd>
<dt>int <i class="arg">index</i></dt>
<dd><p>The degree of the term</p></dd>
</dl></dd>
<dt><a name="13"><b class="cmd">::math::polynomials::allCoeffsPolyn</b> <i class="arg">polyn</i></a></dt>
<dd><p>Return the coefficients of the polynomial (in ascending order).</p>
<dl class="doctools_arguments">
<dt>list <i class="arg">polyn</i></dt>
<dd><p>The polynomial in question</p></dd>
</dl></dd>
</dl>
</div>
<div id="section3" class="doctools_section"><h2><a name="section3">REMARKS ON THE IMPLEMENTATION</a></h2>
<p>The implementation for evaluating the polynomials at some point uses
Horn's rule, which guarantees numerical stability and a minimum of
arithmetic operations.
To recognise that a polynomial definition is indeed a correct
definition, it consists of a list of two elements: the keyword
&quot;POLYNOMIAL&quot; and the list of coefficients in descending order. The
latter makes it easier to implement Horner's rule.</p>
</div>
<div id="section4" class="doctools_section"><h2><a name="section4">Bugs, Ideas, Feedback</a></h2>
<p>This document, and the package it describes, will undoubtedly contain
bugs and other problems.
Please report such in the category <em>math :: polynomials</em> of the
<a href="http://core.tcl.tk/tcllib/reportlist">Tcllib Trackers</a>.
Please also report any ideas for enhancements you may have for either
package and/or documentation.</p>
<p>When proposing code changes, please provide <em>unified diffs</em>,
i.e the output of <b class="const">diff -u</b>.</p>
<p>Note further that <em>attachments</em> are strongly preferred over
inlined patches. Attachments can be made by going to the <b class="const">Edit</b>
form of the ticket immediately after its creation, and then using the
left-most button in the secondary navigation bar.</p>
</div>
<div id="keywords" class="doctools_section"><h2><a name="keywords">Keywords</a></h2>
<p><a href="../../../../index.html#math">math</a>, <a href="../../../../index.html#polynomial_functions">polynomial functions</a></p>
</div>
<div id="category" class="doctools_section"><h2><a name="category">Category</a></h2>
<p>Mathematics</p>
</div>
<div id="copyright" class="doctools_section"><h2><a name="copyright">Copyright</a></h2>
<p>Copyright &copy; 2004 Arjen Markus &lt;arjenmarkus@users.sourceforge.net&gt;</p>
</div>
</div></body></html>
